From 786b589d95077b465dcc2311ff2489ee7bb9a49f Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 5 Oct 2009 11:39:29 +0200 Subject: [PATCH] Fix up _gdk_windowing_window_at_pointer coordinate reporting We need to do a final XQueryWindow to get the coordinates inside the windows rather than in the parent window. This fixes bug #597386, "Cannot click buttons more than once...", which failed due to the grab tracking stuff getting the wrong coordinates as per the above. --- gdk/x11/gdkwindow-x11.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index c65a0d4f26..a8dd83b6bc 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -3252,12 +3252,15 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display, while (xwindow) { xwindow_last = xwindow; - if (get_toplevel && - (window = gdk_window_lookup_for_display (display, xwindow)) != NULL && - GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN) - break; XQueryPointer (xdisplay, xwindow, &root, &xwindow, &rootx, &rooty, &winx, &winy, &xmask); + if (get_toplevel && + (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL && + GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN) + { + xwindow = xwindow_last; + break; + } } } else @@ -3315,16 +3318,16 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display, while (xwindow) { xwindow_last = xwindow; - if (get_toplevel && - (window = gdk_window_lookup_for_display (display, xwindow)) != NULL && - GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN) - break; gdk_error_trap_push (); XQueryPointer (xdisplay, xwindow, &root, &xwindow, &rootx, &rooty, &winx, &winy, &xmask); gdk_flush (); if (gdk_error_trap_pop ()) break; + if (get_toplevel && + (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL && + GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN) + break; } } -- 2.30.2